/*
 * @Description:
 * @Author: your name
 * @version:
 * @Date: 2024-01-25 09:18:33
 * @LastEditors: your name
 * @LastEditTime: 2024-01-25 15:09:44
 */
const vetrixShader = /*glsl*/ `
void vertexMain(VertexInput vsInput, inout czm_modelVertexOutput vsOutput) {

}
`;

const fragmentShader = /*glsl*/ `
void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {
    // 获取模型坐标
    vec3 positionMC=fsInput.attributes.positionMC;

    // 获取随时间变化的值ITime 取值（0,1）
    float ITime=sin(czm_frameNumber / 60.0);

    // 计算当前片元的模型高度 因为数据问题，取y分量，y相当于z是当前片元的高度
    float czm_height=positionMC.y-minHeight;
    // 将范围打到（0,1）的区间 clamp(value,min,max)
    float czm_h=clamp(czm_height/maxHeight,.0,1.);


    // 反射贴图
    // 1.获取眼睛坐标系下的模型坐标
    vec3 positionEC=fsInput.attributes.positionEC;
    // 2.眼睛坐标系下的法向量
    vec3 normalEC=fsInput.attributes.normalEC;
    // 获取模型到眼睛的向量
    vec3 posToCamera=normalize(-positionEC);
    // 反射之后的成像
    vec3 reflectImg=reflect(posToCamera,normalEC);
    // 使用czm_inverseViewRotation，将眼睛坐标系下的向量转为世界坐标系
    vec3 coord=normalize(vec3(czm_inverseViewRotation*reflectImg));
    // 根据反射之后的成像进行贴图
    vec3 reflectCol=texture2D(u_envTexture,vec2(coord.x,coord.z)).rgb;
    
    // 假设我们只需要一条固定光带 宽度为0.05
    float czm_diff = step(0.005, abs(czm_h - ITime));
    // czm_diff为1，代表当前片元不在0.005这个光带里面,我们保留原来的颜色
    // czm_diff为0，代表当前片元在0.005这个光带里面，我们给原来的颜色加上亮度
    material.diffuse += (material.diffuse * (1.0 - czm_diff)*13.0);

    material.diffuse=mix(material.diffuse,reflectCol,0.5);

    // 模型渐变色
    material.diffuse *= (czm_h+ITime*0.1); // 渐变
}
`;

export default { vetrixShader, fragmentShader };
